Crate serde_ignored
source ·Expand description
Find out about keys that are ignored when deserializing data. This crate
provides a wrapper that works with any existing Serde Deserializer
and
invokes a callback on every ignored field.
You can use this to warn users about extraneous keys in a config file, for example.
Note that if you want unrecognized fields to be an error, consider using the
#[serde(deny_unknown_fields)]
attribute instead.
Example
use serde::Deserialize;
use std::collections::{BTreeSet as Set, BTreeMap as Map};
#[derive(Debug, PartialEq, Deserialize)]
struct Package {
name: String,
dependencies: Map<String, Dependency>,
}
#[derive(Debug, PartialEq, Deserialize)]
struct Dependency {
version: String,
}
let j = r#"{
"name": "demo",
"dependencies": {
"serde": {
"version": "1.0",
"typo1": ""
}
},
"typo2": {
"inner": ""
},
"typo3": {}
}"#;
// Some Deserializer.
let jd = &mut serde_json::Deserializer::from_str(j);
// We will build a set of paths to the unused elements.
let mut unused = Set::new();
let p: Package = serde_ignored::deserialize(jd, |path| {
unused.insert(path.to_string());
})?;
assert_eq!(p, Package {
name: "demo".to_owned(),
dependencies: {
let mut map = Map::new();
map.insert("serde".to_owned(), Dependency {
version: "1.0".to_owned(),
});
map
},
});
assert_eq!(unused, {
let mut expected = Set::new();
expected.insert("dependencies.serde.typo1".to_owned());
expected.insert("typo2".to_owned());
expected.insert("typo3".to_owned());
expected
});
Structs
- Deserializer adapter that invokes a callback with the path to every unused field of the input.
Enums
- Path to the current value in the input, like
dependencies.serde.typo1
.
Functions
- Entry point. See crate documentation for an example.